package com.wang.tool.extension;

class Demo {



    public static void main(String[] args) {


//        1.spring启动类添加 @EnableExtension 并配置
//          可扩展类：TestExt   ，扩展实现选择器 TestSelector

//        2.别的bean中引用 TestExt
//        @Autowired
//        TestExt testExt;

//        3.使用
        TestExt testExt = null;
//        自动选择实现
        testExt.hello("shao");


    }


    /**
     * 定义扩展点
     * @Author wangshaopeng
     * @Date 2022/5/15
     */
    @Extension(selector = TestSelector.class)
    private static interface TestExt {

        void hello(String name);


    }

    /**
     * @Author wangshaopeng
     * @Date 2022/5/15
     */
    private static class TestSelector implements ExtensionSelector<ExtensionScene> {
        @Override
        public Object selectImpl(Class<?> extensionType, ExtensionScene scene, ExtensionFactory.ExtensionLibrary extensionLibrary) {
//            直接根据参数选实现
            return extensionLibrary.getImpl(null);
        }
    }

    /**
     * 实现1
     * @Author wangshaopeng
     * @Date 2022/5/15
     */
    @ExtensionImpl("peng")
    private static class PengApi implements TestExt {
        @Override
        public void hello(String name) {
            System.out.println("peng");
        }
    }


    /**
     * 实现1
     * @Author wangshaopeng
     * @Date 2022/5/15
     */
    @ExtensionImpl("shao")
    private static class ShaoApi implements TestExt {
        @Override
        public void hello(String name) {
            System.out.println("shao");
        }
    }
}